﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos
Public Class FamiliasBL
    Public Function RegistrarFamilia(ByVal TokenConexion As String, ByVal Familias As FamiliasBE, ByRef detResp As DetalleRespuesta) As Boolean
        Dim famDAL As FamiliasDAL = New FamiliasDAL("")
        detResp.Mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Registrar, Familias, detResp.Mensajes)) Then
                famDAL = New FamiliasDAL(TokenConexion)
                If (famDAL.existeFamiliaCla(Familias.ClaFamilia)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_PreviamenteRegistrado,
                                             "Existe un registro con la clave de la familia indicada." & vbCrLf & detResp.Mensajes)
                    Return False
                Else
                    If (famDAL.registraFamilia(Familias)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "La Familia se registro con éxito.")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "La Familia no pudo ser registrada en el sistema." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La Familia no es valida para registrar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.RegistrarFamilia")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al registrar la familia: " & ex.Message)
            Return False
        Finally
            famDAL = Nothing
        End Try
    End Function

    Private Function EsValidoPara(ByVal tipoOperacion As Enumeraciones.operacionesCatalogos, ByRef Familias As FamiliasBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (tipoOperacion = Enumeraciones.operacionesCatalogos.Actualizar) Then
                If String.IsNullOrEmpty(Familias.IdFamilia) Then
                    mensaje &= "El Id de la Familia es requerido." & vbCrLf
                Else
                    If (Familias.IdFamilia < 1) Then
                        mensaje &= "El Id de la Familia debe ser mayor a 0 y estar previamente registrado en el sistema." & vbCrLf
                    End If
                End If
            End If
            If (String.IsNullOrWhiteSpace(Familias.ClaFamilia)) Then
                mensaje &= "La clave de la familia es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                Familias.ClaFamilia = Familias.ClaFamilia.Trim
                If (Familias.ClaFamilia.Length > 15) Then
                    Familias.ClaFamilia = Familias.ClaFamilia.Substring(0, 15)
                End If
            End If

            If (String.IsNullOrWhiteSpace(Familias.DesFamilia)) Then
                mensaje &= "La Descripcion de la familia es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                Familias.DesFamilia = Familias.DesFamilia.Trim
                If (Familias.DesFamilia.Length > 80) Then
                    Familias.DesFamilia = Familias.DesFamilia.Substring(0, 80)
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaFamilia(ByVal TokenConexion As String, ByVal Familias As FamiliasBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim famDAL As FamiliasDAL = New FamiliasDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Actualizar, Familias, detResp.Mensajes)) Then
                famDAL = New FamiliasDAL(TokenConexion)
                If (famDAL.actualizaFamilia(Familias, detResp.Mensajes)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Datos de la Familia actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos de la Familia." & vbCrLf &
                                             "Verifique que el Id de la Familia esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.ActualizaFamilia")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al actualizar Familia: " & ex.Message)
            Return False
        Finally
            famDAL = Nothing
        End Try
    End Function

    Public Function CambiaEstatus(ByVal tokenConexion As String, ByVal Id As Integer, ByVal setActivo As Boolean,
                                           ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim famDAL As FamiliasDAL = New FamiliasDAL("")
        Try
            If (EsValidoParaGetFamilia(Id, detResp.Mensajes)) Then
                famDAL = New FamiliasDAL(RijndaelSimple.desencriptaDefault(tokenConexion))
                If (famDAL.cambiaStatus(Id, setActivo)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Estatus de la Familia Actualizado.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de estatus de la Familia." & vbCrLf &
                                             "Verifique que el Id de la Familia esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.CambiaEstatus")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar estatus de la Familia: " & ex.Message)
            Return False
        Finally
            famDAL = Nothing
        End Try
    End Function

    Public Function GetFamilia(ByVal tokenConexion As String, ByVal IdFamilia As Integer, ByRef detResp As DetalleRespuesta) As FamiliasBE
        detResp.Mensajes = ""
        Dim famDAL As FamiliasDAL = New FamiliasDAL("")
        Dim famBE As FamiliasBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetFamilia(IdFamilia, detResp.Mensajes)) Then
                famDAL = New FamiliasDAL(tokenConexion)
                famBE = famDAL.getFamilia(IdFamilia)
                If (famBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Se obtuvo la información de la familia con éxito.")
                    Return famBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                             "No se obtuvo la información de la Familia" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El id de la Familia proporcionado no existe: " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.GetFamilia")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al obtener información de la Familia: " & ex.Message)
            Return Nothing
        Finally
            famDAL = Nothing
            famBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetFamilia(ByRef IdFamilia As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(IdFamilia)) Then
                mensaje &= "El campo ID de la Familia no puede ir vacio." & vbCrLf
            Else
                If (IdFamilia <= 0) Then
                    mensaje &= "El Id de la Familia debe ser mayor a 0" & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.EsValidoParaGetFamilia")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoFamilias(ByVal tokenConexion As String, ByVal DesFamilia As String,
                                       ByVal ClaFamilia As String, ByVal Status As Enumeraciones.estatusParaBusquedas,
                                       ByVal pRegistroInicial As Integer, ByVal pPageSize As Integer,
                                       ByVal pSortColumn As Enumeraciones.campoOrdenamiento, ByVal pSortDirection As Enumeraciones.tipoOrdenamiento,
                                       ByRef pTotalRegistros As Integer,
                                       ByRef detResp As DetalleRespuesta) As List(Of FamiliasBE)
        detResp.Mensajes = ""
        pTotalRegistros = 0
        Dim famDAL As FamiliasDAL = New FamiliasDAL("")
        Dim listfamBE As List(Of FamiliasBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            famDAL = New FamiliasDAL(tokenConexion)
            listfamBE = famDAL.getlistadoFamilias(DesFamilia, ClaFamilia, Status, pRegistroInicial, pPageSize, pSortColumn, pSortDirection, pTotalRegistros)
            If (listfamBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Se obtuvo el listado de Familias con éxito.")
                Return listfamBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoObtuvoRegistrosParaListado,
                                         "No se obtuvo el listado de Familias" & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "FamiliasBL.GetListadoFamilias")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al obtener el listado de Familias: " & ex.Message)
            Return Nothing
        Finally
            famDAL = Nothing
            listfamBE = Nothing
        End Try
    End Function

End Class
